package com.atguigu.gmall.order.mq;

import com.atguigu.gmall.common.config.mq.service.MqService;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;


/**
 * @Description
 * @Return
 * @Author https://weiranyi.github.io
 * @Date Created in 2022-12-22 20:11
 **/
@Slf4j
@Component
public class MqListener {
    @Autowired
    MqService mqService;
//
//    // 配置一个监听器
//    @RabbitListener(queues = "student")
//    public void getQueuesMessage(Message message, Channel channel) throws IOException {
//        // 得到消息的唯一标识【派发标签（DeliveryTag）】
//        long tag = message.getMessageProperties().getDeliveryTag();
//        try {
//            byte[] messageBody = message.getBody();
//            String string = new String(messageBody);
//            log.info("测试" + string);
//            // 参数2：false，只确认一个消息成功，而不是确认一批成功
//            int i = 10 / 0;
//            channel.basicAck(tag, false); //回复ok
//
//        } catch (Exception e) {
//            log.error("消息消费失败，原因是：{},正在重试...", e);
//            // 重新入队: 重试机制
//            /**
//             * 参数1：派发标签 tag [表这个消息失败了]
//             * 参数2：不开启批量确认[配置的是一次获取10个，批量设置为true相当于告诉服务器这一批有问题，所以设置为false]
//             *       false：只回复自己的
//             * 参数3：是否重新入队[相当于放到当前队列末尾]，如果不重新入队就在对头一直插队
//             *       true: 重新入队
//             */
//            mqService.retry(message, channel, 5L);
//
//        }
//    }
}
